Modern computing devices have become ubiquitous tools for personal, business, and social uses. As such, many modern computing devices are capable of connecting to various data networks, including the Internet, to transmit and receive data communications over the various data networks at varying rates of speed. To facilitate communications between computing devices, the data networks typically include one or more network computing devices (e.g., compute servers, storage servers, etc.) to route communications (e.g., via switches, routers, etc.) that enter/exit a network (e.g., north-south network traffic) and between network computing devices in the network (e.g., east-west network traffic). In present packet-switched network architectures, data is transmitted in the form of network packets between networked computing devices. At a high level, data is packetized into a network packet at one computing device and the resulting packet transmitted, via a transmission device (e.g., a network interface controller (NIC) of the computing device), to another computing device over a network.
Upon receipt of a network packet, the computing device typically performs some level of examination on at least a portion of the received network packet to determine what, if any, operations (e.g., drop the network packet, process/store at least a portion of the network packet, forward the network packet, etc.) are to be performed by the computing device. Accordingly, it should be appreciated that data associated with the network packet (e.g., header data, payload data, footer data, etc.) is buffered upon receipt. To do so, present techniques typically allocate large buffers to accommodate entire jumbo frames or use a collection of smaller buffers chained together. However, in such embodiments in which large buffers are used, small network packets can consume a large buffer, resulting in wasted memory. Alternatively, in such embodiments in which a chain of small buffers is used, the chain of small buffers has to be processed by the receive stack and the resulting discontiguous packet means that prefetch operation(s) may not operate effectively, each of which can lower overall system performance.